Golang 笔记

1. hello Golang

  • 新建项目,推荐GoLand工具
GOPATH目录:D:\go\awesomeProject
三个标准目录:bin,pkg,src
MAIN目录:D:\go\awesomeProject\src\GolangStudy\firstGolang\main
GLAND设置GOPATH 必须重启,否则不生效
  • hello.go
package main

/*
import "fmt"
import "time"
*/ import (
"fmt"
"time"
) // man函数
func main() { //花裤服 必须和main在同一行
// 分号; 加不加不影响
fmt.Println("hell0 Go") time.Sleep(1 * time.Second) }
  • 直接运行:

    • D:\go\awesomeProject\src\GolangStudy\firstGolang\main> go run .\hello.go
  • 编译后运行:

    • D:\go\awesomeProject\src\GolangStudy\firstGolang\main> go build .\hello.go
    • D:\go\awesomeProject\src\GolangStudy\firstGolang\main> .\hello.exe

2. 变量

  • main入口
package main
import "fmt" func main() {
// 代码
}
  • 局部变量
// 方法1:申明一个变量,默认值 0,且申明变量必须使用
var a int fmt.Println("a = ", a)
fmt.Printf("type of a = %T\n", a) // 方法2:申明一个变量,初始化一个值
var b int = 1
fmt.Println("b = ", b)
fmt.Printf("type of b = %T\n", b) var bb string = "bb"
fmt.Println("bb = ", bb)
fmt.Printf("type of bb = %T\n", bb) // 方法3:申明一个变量,类型自动推断,这很python化
var c = 2
fmt.Println("c = ", c)
fmt.Printf("type of c = %T\n", c) var cc = "cc"
fmt.Println("cc = ", cc)
fmt.Printf("type of cc = %T\n", cc) // 方法4:申明一个变量,不要哇 var , 只能在函数体内使用!!!!!!!!!!!!!!!
e := 100
fmt.Println("e = ", e)
fmt.Printf("type of e = %T\n", e) f := 3.14
fmt.Println("f = ", f)
fmt.Printf("type of f = %T\n", f)
  • 全局变量:不支持 :=

  • 多行变量

// 申明多个变量, 变量类型不要求统一
var xx, yy = 100, "元"
fmt.Println("xx = ", xx, "yy = ", yy) // 申明多个变量,多行写
var (
aaa = 50
bbb = "元"
ccc = true
)
fmt.Println("aaa = ", aaa, "bbb = ", bbb, "ccc = ", ccc)

3. 常量

  • const_iota
package main

import "fmt"

// const 定义枚举类型
// const 内部使用 iota 实现累加, 第一行默认为0
// iota 只能在 const 内使用
const (
BEIJING = 10 * iota // iota = 0
SHANGHAI // iota = 1
SHENZHEN // iota = 2
) const (
a, b = iota + 1, iota + 2 // a=1, b=2
c, d // c=2, d=3
e, f // e=3, f=4
g, h = iota * 2, iota * 3 // g=6, h=9
i, j // i=8, j =12
) func main() {
// 常量:const类似scala的val(只读)
const length int = 10 fmt.Println("length = ", length) fmt.Println("BEIJING = ", BEIJING, "SHANGHAI = ", SHANGHAI, "SHENZHEN = ", SHENZHEN) fmt.Println("a,b = ", a, b)
fmt.Println("c,d = ", c, d)
fmt.Println("e,f = ", e, f)
fmt.Println("g,h = ", g, h)
fmt.Println("i,j = ", i, j) }

4. 函数多返回值

package main

import "fmt"

// 单反回值
func fool(a string, b int) int {
fmt.Println("a = ", a)
fmt.Println("b = ", b) c := 100
return c
} // 多返回值 匿名返回
func fool2(a string, b int) (int, int) {
fmt.Println("a = ", a)
fmt.Println("b = ", b) return 666, 777
} // 多返回值 实名返回 (r1 int, r2 int)\
// r1 r2 默认值 0
func fool3(a string, b int) (r1 int, r2 int) {
fmt.Println("a = ", a)
fmt.Println("b = ", b) // 此处没有 冒号
r1 = 666
r2 = 777 return
} // 多返回值 实名返回 (r1, r2 int)
func fool4(a string, b int) (r1, r2 int) {
fmt.Println("a = ", a)
fmt.Println("b = ", b) // 此处没有 冒号
r1 = 666
r2 = 777 return
} func main() {
ret1 := fool("abc", 555)
fmt.Println("ret1 = ", ret1) res1, res2 := fool2("abc", 555)
fmt.Println("res1 = ", res1, "res2 = ", res2) res3, res4 := fool3("abc", 555)
fmt.Println("res3 = ", res3, "res4 = ", res4) }

5. init函数

  • 导包时:

    • 优先调用每个包的init方法,
    • 然后在执行main()方法
  • 确定GOPATH位置

// lib1 位置 D:\go\awesomeProject\src\GolangStudy\5-init\lib1\lib1.go
package lib1
import "fmt" func init() {
fmt.Println("lib1.init() ...")
} func Lib1Test() {
// 函数名大写表示对外公开
fmt.Println("Lib1Test")
} // lib1 位置 D:\go\awesomeProject\src\GolangStudy\5-init\lib2\lib2.go
package lib2
import "fmt" func init() {
fmt.Println("lib2.init() ...")
} func Lib2Test() {
// 函数名大写表示对外公开
fmt.Println("Lib2Test")
} // main()位置: D:\go\awesomeProject\src\GolangStudy\5-init\main.go
package main import (
"GolangStudy/5-init/lib1"
"GolangStudy/5-init/lib2"
) func main() {
lib1.Lib1Test()
lib2.Lib2Test()
}
  • 返回信息
PS D:\go\awesomeProject\src\GolangStudy\5-init> go run .\main.go
lib1.init() ...
lib2.init() ...
Lib1Test
Lib2Test

6. import导包

  • 匿名导入
  • 别名导入
  • 直接导入(方法)
package main

import (
// 1.匿名导入: 只需要包的init方法,不执行其他函数时
_ "GolangStudy/5-init/lib1" // 2.别名导入:import pandas as pd
mylib2 "GolangStudy/5-init/lib2" // 3.直接导入:from pandas import *
// . "GolangStudy/5-init/lib2"
) func main() {
//lib1.Lib1Test() //导入lib1,但不使用非init方法,使用匿名
mylib2.Lib2Test() //别名
}

7.指针(李姐)

  • 互换(值传递模式): 重新赋值
package main

import "fmt"

// 值传递
func swap1(a int, b int) (int, int) { var tmp int // tmp 初始为 0
tmp = a // 此时 a的值改变的是tmp内存对应的值: 把0改为10
a = b // 此处 这个a在函数内开辟一个新内存地址,默认为0,然后被赋值b=20
b = tmp // 此处 这个b在函数开辟新一个内存地址,然后被赋值tmp=10 return a, b
} func main() { // a,b 的内存地址没变
var a = 10
var b = 20 // 交换 a b == 》 这里需要重新赋值才能改变,否则是不会改变a,b的值
aa, bb := swap1(a, b) fmt.Println("a=", a, "b=", b)
fmt.Println("aa=", aa, "bb=", bb) }
  • res
PS D:\go\awesomeProject\src\GolangStudy\6-point> go run .\pointer1.go
a= 10 b= 20
aa= 20 bb= 10
  • 互换(指针传递)
package main

import "fmt"

// 指针传递  == 》 不需要重新赋值,李姐起来稍微头痛!
// pa *int 表示 pa 这个参数类型是指针(内存地址) --》 a的内存地址指向的值
// pb *int 同理 --》 b的内存地址指向的值
func swap2(pa *int, pb *int) { var tmp int // tmp 初始为 0 ,产生了个新内存地址
tmp = *pa // 此时 tmp 丢弃源内存地址,霸占a的内存地址及值 tmp = 10
*pa = *pb // 此处 a 并未产生新的内存地址,而是把霸占了b的内存地址和值 a = 20
*pb = tmp // 此处 因为第二步 tmp霸占了a的内存地址,所以此时tmp所对应的就是a的内存地址 } func main() { var a = 10
var b = 20 // 直接传内存地址 -- 》 元神出窍???
swap2(&a, &b) fmt.Println("a=", a, "b=", b)
//fmt.Println("aa=", aa, "bb=", bb) }
  • res
PS D:\go\awesomeProject\src\GolangStudy\6-point> go run .\pointer2.go
a= 20 b= 10

Golang 记录的更多相关文章

  1. Golang记录、计算函数执行耗时、运行时间的一个简单方法

    // 写超时警告日志 通用方法   func TimeoutWarning(tag, detailed string, start time.Time, timeLimit float64) {    ...

  2. golang 记录函数执行耗时的一个简单方法。

    先写一个公共函数, 比如在 common 包下有这么一个方法: // 写超时警告日志 通用方法 func TimeoutWarning(tag, detailed string, start time ...

  3. GO语言.树莓派.环境安装和测试

    Go是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.为了方便搜索和识别,有时会将其称为Golang 记录一下如何在树莓派上安装语言环境 第一步: 下载安装包 http ...

  4. [Golang][Mac]Go 语言学习资料记录

    背景:最近的项目开发语言是GOlang 因此需要做一些简单了解和学习记录 又可以学习一下Google的新语言了,想想有些小激动哦~ 官方网站(需翻墙才能打开,比如用蓝灯)https://golang. ...

  5. 找工作面试题记录与参考资料(Golang/C++/计算机网络/操作系统/算法等)

    记录下去年(2020年)找工作的面试题及参考资料. C++ 智能指针的实现原理 多态的实现原理[2] C++11/14/17新特性[3] 手写memcpy和memmove[4] 介绍下boost库 计 ...

  6. golang常用库:日志记录库-logrus使用

    介绍 logrus 它是一个结构化.插件化的日志记录库.完全兼容 golang 标准库中的日志模块.它还内置了 2 种日志输出格式 JSONFormatter 和 TextFormatter,来定义输 ...

  7. 【golang学习记录】环境搭建

    [golang学习记录]环境搭建 一. 概述 本文是[golang学习记录]系列文章的第一篇,安装Go语言及搭建Go语言开发环境,接下来将详细记录自己学习 go 语言的过程,一方面是为了巩固自己学到的 ...

  8. 【Golang笔记】Golang工具包Cobra安装记录

    0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运 ...

  9. golang实现aes-cbc-256加密解密过程记录

    我为什么吃撑了要实现go的aes-cbc-256加密解密功能? 之前的项目是用php实现的,现在准备用go重构,需要用到这个功能,这么常用的功能上网一搜一大把现成例子,于是基于go现有api分分钟实现 ...

随机推荐

  1. c++设计模式概述之备忘录

    代买写的不够规范,,目的是缩短篇幅,实际中请不要这样做. 1.概述 和这个模式相似的生活场景,比如 office的撤销操作.VS  和 xcode等IDE的撤销操作 . 其实都是恢复到上一个或者下一个 ...

  2. 【LeetCode】1029. Two City Scheduling 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 小根堆 排序 日期 题目地址:https://lee ...

  3. 【LeetCode】81. Search in Rotated Sorted Array II 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 题目地址:https://leetcode.com/problems/search-in ...

  4. (4329)Ping pong

    思路:树状数组. 考虑第i个人当裁判,那么只要计算出在他之前比他小的乘在他之后比他大的与在他之前比他大的乘在他之后比他小的,那么用两个树状数组维护一下就行了.复杂的(n*log(n)) 1 #incl ...

  5. 【LeetCode】673. Number of Longest Increasing Subsequence 解题报告(Python)

    [LeetCode]673. Number of Longest Increasing Subsequence 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https:/ ...

  6. MySQL 批量插入,如何不插入重复数据

    1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保语句本身没有问题,否则也会被忽略掉=======>IN ...

  7. Practical Black-Box Attacks against Machine Learning

    目录 概 主要内容 Jacobian-based Dataset Augmentation Note Papernot N, Mcdaniel P, Goodfellow I, et al. Prac ...

  8. 编写Java程序,前方有 3km 的道路障碍,4 辆普通车不能通过,必须等到清障车完成作业离开后,才能继续行驶。用程序来模拟这一过程的发生

    查看本章节 查看作业目录 需求说明: 前方有 3km 的道路障碍,4 辆普通车不能通过,必须等到清障车完成作业离开后,才能继续行驶.用程序来模拟这一过程的发生 实现思路: 创建清障车Wrecker类和 ...

  9. .NET 微服务——CI/CD(3):镜像自动分发

    如何通过Jenkins完成镜像分发?基本做法是:打包镜像→上传镜像到仓库→脚本分发.镜像仓库也有很多,比如docker hub.Harbor等,今天这一篇讲一下基于阿里云镜像仓库的操作. 首先,准备一 ...

  10. 为什么要避免在 Go 中使用 ioutil.ReadAll?

    原文链接: 为什么要避免在 Go 中使用 ioutil.ReadAll? ioutil.ReadAll 主要的作用是从一个 io.Reader 中读取所有数据,直到结尾. 在 GitHub 上搜索 i ...