Go语言中文网 为您找到相关结果 69

Go中的switch fallthrough

switch sExpr { case expr1: some instructions case expr2: some other instructions case expr3: some other instructions default: other code } sExpr和expr1、expr2、expr3的类型必须一致。Go的switch非常灵活,表达式不必是常量或整数,执行的过程从上至下,直到找到匹配项;而如果switch没有表达式,它会匹配true。 Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动向下执行其他case,而是跳出整个switch, 但是可以使用f...阅读全文

go语言:flag的使用

go语言flag的使用 package main import ( "flag" "fmt" ) var music_file *string = flag.String("file", "musicfile", "Use -file ") func main() { flag.Parse() fmt.Println(*music_file) } 例如文件为flagTest.go go run flagTest.go -file "../music/sun.mp3" 即可指定file参数的值。 如果直接使用go run flagTest.go -file则会提示你-file的使用说明.-file="musicfile": Use -file 如...阅读全文

博文 2014-10-21 23:00:00 x369201170

go reflect TypeOf 与ValueOf

学习go的反射对于理解go的底层实现以及接口机制有着非常重要的价值;本篇文章从一个源程序来体验一下go反射的两个核心函数TypeOf 和ValueOf的使用方法,特别体验下怎么根据type构造type实例的办法。 package main import ( "fmt" "reflect" ) type Speaker interface { Speak()string Set(string) } type Teacher struct { Name string } func (this *Teacher) Speak() string { return this.Name } func (this *Teacher) Set(name string) { this.Name = name ...阅读全文

博文 2015-06-18 09:03:56 hittata

关于fmt.Scan()和fmt.Scanf()的区别

有人问道: 我刚开始接触go语言,在根据书写二分法的时候发现个问题。 虽然解决了,但搞不清楚原因是为什么。 代码如下: package main import "fmt" func main() { min, max := 0, 100 fmt.Printf("%d--%d", min, max) for min < max { i := (min + max) / 2 fmt.Printf("<=%d(y or n) ", i) var s string fmt.Scanf("%s", &s) if s != "" && s[0] == 'y' { max = i } e...阅读全文

go package的理解

golang package是基本的管理单元, 同一个package下面,可以有非常多的不同文件,只要 每个文件的头部 都有 如 "package xxx" 的相同name, 就可以 在主方法中使用 xxx.Method()调用不同文件中的方法了。 文件夹名字可以和这个package 名称不一致, 比如我有个文件夹名字是mypackage,其中包含了a.go,b.go, c.go三个文件 : mypackage | --a.go | --b.go | --c.go 比如a.go中有 Saya(),b.go中有Sayb() 而几个文件共同的package name 确是testpackage 所以在 主函数中调用a.go 和b.go文件中的各自方法只要用,testpackage.Saya() ...阅读全文

博文 2015-04-24 00:00:00 rojas

golang之flag.String

无论是c语言还是golang语言或是其他语言,启动应用程序时都可以带一些参数,然后系统根据传入的参数进行特点的工作。如:./main -b /home/backupdir -d true 那么如何更好的解析这些参数呢?前两周自己做项目时是通过 range os.Args 来解析这些参数。今天看到了 flag.String 这个方法,感觉之前做的好傻,觉得更应该用golang自带的flag.String来解析参数。 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 ) 7 8 func main() { 9 backup_dir := flag.String("b", "/home/default_dir", "backup path") 10 de...阅读全文

博文 2015-07-20 03:00:00 hezhixiong

Golang实现snowflake算法(分布式唯一id生成器)

package main import ( "errors" "fmt" "sync" "time" ) const ( twepoch = int64(1417937700000) // 默认起始的时间戳 1449473700000 。计算时,减去这个值 DistrictIdBits = uint(5) //区域 所占用位置 NodeIdBits = uint(9) //节点 所占位置 sequenceBits = uint(10) //自增ID 所占用位置 /* * 1 符号位 | 39 时间戳 | 5 区域 | 9 节点 | 10 (毫秒内)自增ID * 0 | 0000000 00000000 00000000 00000000 00000000 | 00000 | 000000 0...阅读全文

博文 2017-04-25 07:00:25 路人甲777

golang flag包

go flag 包用来解析命令行参数,通过一个简单的例子来了解下 package main import ( "flag" "fmt" ) func main() { //参数1:命令行传递参数的名称 参数2:默认值 参数3:参数的说明 username := flag.String("name", "", "Input your name") //注意 username 是string 的指针 type: *string // 在例如: // var ip = flag.Int("flagname", 1234, "help message for flagname") //ip 的类型是: *int flag.Parse() fmt.Println("Hello,", *username...阅读全文

博文 2016-01-15 03:00:00 davin

go语言运行shell命令

// go语言运行shell命令 package main import ( "os/exec" "fmt" "os" "strings" ) func main() { var ip, whoami []byte var err error var cmd *exec.Cmd // 执行单个shell命令时, 直接运行即可 cmd = exec.Command("whoami") if whoami, err = cmd.Output(); err != nil { fmt.Println(err) os.Exit(1) } // 默认输出有一个换行 fmt.Println(string(whoami)) // 指定参数后过滤换行符 fmt.Println(strings.Trim(str...阅读全文

博文 2017-06-07 12:05:55 广训

golang学习的点点滴滴:struct匿名字段

package main import "fmt" type Base struct { Name string Age int } type Child struct { Base // 匿名字段, 默认把Base的所有字段都继承过来了。 这样看起来才像真正的继承 Age int } func main() { c := new(Child) c.Name = "hello" // 可以直接使用Base中的字段 c.Age = 20 // 如果有重复的, 则最外的优先 fmt.Println(c.Name) // hello fmt.Println(c.Age) // 20 fmt.Println(c.Base.Age) // 要访问Base中的,可以这样写 0 ...阅读全文

博文 2014-10-04 19:27:41 亓斌哥哥

Docker 管理工具 Shipyard

Shipyard 是一个基于 Web 的 [Docker](http://www.oschina.net/p/docker) 管理工具,支持多 host,可以把多个 Docker host 上的 containers 统一管理;可以查看 images,甚至 build images;并提供 RESTful API 等等。 Shipyard 要管理和控制 Docker host 的话需要先修改 Docker host 上的默认配置使其支持远程管理。 ![Login](http://static.oschina.net/uploads/img/201312/15230303_JvLZ.jpg) ![Containers](http://static.oschina.net/uploads/i...阅读全文

开源项目 2013-12-14 16:00:00 shipyard

Go的AES加密的默认工作模式的吗?

如果是的话 这段Node.js加密 var cipher = crypto.createCipher('aes-128-ecb', key); var encrypted = ""; encrypted += cipher.update(plaintext, 'binary', 'base64'); 应该是转换成下面的Go代码 block, err := aes.NewCipher(key) if err != nil { return nil, err } blockSize := block.BlockSize() origData = PKCS5Padding(origData, blockSize) // origData...阅读全文

msgpack在java/c和go中序列化的区别-解决

既然已经知道msgpack-java/msgpack-c里,默认情况下把class pack成类似json-array 而msgpack-go,默认情况下把class pack成类似json-map 顺着这个,翻看msgpack-Go的代码,找到了MsgpackHandle 。。。。中间过程省略 最后找到答案,其实msgpack-go已经提供好api package main import ( "fmt" "github.com/ugorji/go/codec" ) type UserStruct struct { ID int32 Name string } var ( b []byte mh codec.MsgpackHandle ) func main() { user := User...阅读全文

博文 2014-10-04 19:26:30 咖啡伴侣

golang优化

// MatrixCalcTest project main.go package main import ( "fmt" "time" ) const cSize int = 30 type mymatrix [cSize][cSize]int func mkmatrix(rows, cols int, mx *mymatrix) { rows-- cols-- count := 1 for r := 0; r <= rows; r++ { for c := 0; c <= cols; c++ { mx[r][c] = count count++ } } } func multmatrix(rows, cols int, m1, m2 *mymatrix, mm *mymatrix) { ...阅读全文

博文 2014-12-11 22:00:06 flyking

golang学习的点点滴滴:接口组合

package main import "fmt" type IReader interface { Read(file string) []byte } type IWriter interface { Write(file string, data []byte) } // 接口组合, 这些默认就继承了Reader和Writer中的抽象方法 type IReadWriter interface { IReader IWriter } type ReadWriter struct { } func (rw *ReadWriter) Read(file string) []byte { return nil } func (rw *ReadWriter) Write(file string,...阅读全文

博文 2014-10-04 19:27:40 亓斌哥哥

go学习笔记-go语言传值默认采用value还是reference?

看下面的程序 package main import "fmt" type Question struct { title string detail string } func (ques Question) Print() { fmt.Println(ques.title) } func (ques Question) Update2(title string) { ques.title = title } func (ques *Question) Update(title string) { ques.title = title } func main() { ques := Question{ title: "why", detail: "haha", } ques.Print()...阅读全文

博文 2015-12-31 03:00:00 inevermore

Zstd算法Golang应用

https://github.com/datadog/zstd import ( “zstd" "io" ) type ZstdEncoder struct { File *os.File ZstdWriter *zstd.Writer } //level是压缩级别:1~19,越大越慢。默认为3 func NewZstdEncoder(filename string, level int) (*ZstdEncoder,error) { f,err := os.Create(filename) if err != nil { return nil, err } w := zstd.NewWriterLevel(f,level) return &ZstdEncoder{File:f,ZstdWr...阅读全文

博文 2016-10-21 08:00:17 shengjuntu

【译】GOPATH的默认值

从Go 1.8开始,如果GOPATH的环境变量为空,Go将会设置一个默认的GOPATH环境变量。 Go初学者第一次安装完Go之后,他们往往会因为忘记设置GOPATH环境变量而得到you have to set a GOPATH这样的错误。这个需求的优先级逐渐变高。对于Go的新用户来说,解释GOPATH的作用、指导他们如何设置GOPATH将会使它们不能专注使用Go。尤其是有些时候,这些人并不是要去使用Go语言去开发,而是使用go get去下载一些必要的命令。 Go 1.8将会设置默认的GOPATH。如果你自己没有设置GOPATH,Go将会使用默认值。默认GOPATH是: 在Unix-like系统上是在$HOME/go目录下 在Windows系统下是%USERPROFILE%\go 虽然已经有了...阅读全文

go环境配置

第一步:下载go1.4.1.windows-amd64.msi默认安装好,添加bin路径到classpath 第二步:新建文本保存以下代码,放到C盘根目录,命名为test.go package main import "fmt" func main() { fmt.Println("Hello, World!") } 第三步:测试配置是否成功. Hello,World!配置成功...阅读全文

博文 2015-04-22 08:00:00 Junmay

奇怪的go语言iota

go语言iota有点奇怪,看下面代码: package main import ( "fmt" ) const ( TestMin = -1 TestA TestB = iota TestC ) func main() { fmt.Printf("TestMin:%d\n", TestMin) fmt.Printf("TestA:%d\n", TestA) fmt.Printf("TestB:%d\n", TestB) fmt.Printf("TestC:%d\n", TestC) } 上面代码的执行结果是什么呢? 结果是这样的,看到结果,对iota的用法就基本掌握了: /* TestMin:-1 TestA:-1 TestB:2 TestC:3 */ 再来看一例: package main...阅读全文

博文 2016-06-19 11:02:34 lanyang123456

idea配置golang

用os x的installer pkg安装go到默认路径/usr/local/go下面之后,进入idea提示找不到GOROOT和GOPATH 直接在terminal输入下列命令 launchctl setenv GOROOT /usr/local/go launchctl setenv GOPATH /Users/yourname/go 再进入即可。 版权声明:本文为博主原创文章,未经博主允许不得转载...阅读全文

博文 2015-10-22 19:00:01 kcccss111

go语言编译记录

$ 6g mypak.go #先编译自定义包,生成mypak.6 $ 6g test.go # 然后编译,生成test.6 $ 6l -o go_test test.6 # 链接生成新文件名 go_test $ go_test hello, world 如在程序中有自定义包(如本例test.go中引用了mypak包),则需要使用 import("./mypak"),其中 ./ 告诉编译器(compiler)使用我们自己的package,而不是在默认的package路径中找,而且编译时,需要先编译mypak.go,然后再编译test.go,要注意顺...阅读全文

博文 2014-10-04 19:26:16 zdrqq

go默认httpclient的UserAgent在哪里设置的?

代码 ``` func main() { http.Get("http://localhost:8888/hello") } ``` header 是如下 ``` map[User-Agent:[Go-http-client/1.1] Accept-Encoding:[gzip]] ``` 请问下大家,这个User-Agent是在哪里设置的,我用debug从头跟到尾,直到程序结束Header都是空,为什么收到的请求User-Agent变成了Go-http-client/1.1 , 这个是谁填的,难到不是go填的...阅读全文

go语言, defer con.Close() 使用之一

defer con.Close() //可以接收for循环的错误 然后默认退出连接 这样可以使程序不至于崩溃 要不然会直接退出程序 for { length, err2 := con.Read(msg) if err2 != nil { addMsg("与服务器断开连接!\n") return } str = string(msg[0:length]) out, _ := iconv.ConvertString(str, "gb2312", "utf-8") outTE.AppendText("From: ") //addMsg(str) addMsg(out) if str == "00" { //addMsg("00") con.Write([]byte("00")) } else { ...阅读全文

博文 2016-04-18 15:00:01 xwiwi

golang json Unmarshal 精度问题

golang使用json.Unmarshal的时候,有些数字类型的数据会默认转为float64,而一些数据因其比较大,导致输出的时候会出现数据与原数据不等的现象,解决办法是,将此数据类型变为json.Number,如下: type MyData struct { Nid json.Number `json:"nid"` } func main() { var testJson string = `{"nid":114420234065740369922}` var data MyData json.Unmarshal([]byte(testJson), &data) fmt.Println(data.Nid.String()) ...阅读全文

博文 2019-01-15 23:34:42 咣咣当

golang学习的点点滴滴:函数的使用

package main import ( "fmt" "errors" ) func main() { res, err := Add(1, 2) if nil == err { fmt.Println(res) } _, e := Add(1, -5) fmt.Println(e) } func Add(a, b int) (res int, err error) { if b < 0 { err = errors.New("error") return // 返回返回值列表的值,没赋值的默认 } res = a + b return // 返回返回值列表的值,没赋值的默认 ...阅读全文

博文 2014-10-04 19:27:05 亓斌哥哥

golang log日志笔记

日志是程序中比较重要的信息,但有时又不想输出到屏幕上。下面就对golang中把日志输出到指定文件做如下记录: package main import ("flag""fmt""log""os") var ( logF = flag.String("log", "test.log", "Log file name") //将运行时参数 地址 绑定到logF 运行时没带参数默认logF为test.log)func main() {flag.Parse() //解析参数付给logFoutfile, err := os.OpenFile(*logF, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) //打开文件,若果文件不存在就创建一个同名文件并打开if err !...阅读全文

博文 2017-10-30 00:00:01 Czc963239044

go 本周周一的获取

time.Weekday类型可以做运算,强制转int,会得到偏差数。默认是 Sunday 开始到 Saturday 算 0,1,2,3,4,5,6 所以只有Monday减去Sunday的时候是正数,特殊处理下就可以了。 package date import ( "fmt" "time" ) func WeekDayTest() { now := time.Now() offset := int(time.Monday - now.Weekday()) if offset > 0 { offset = -6 } weekStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(...阅读全文

博文 2019-03-18 12:34:43 boywus

Go 1.13设置代理

在Go 1.13中,我们可以通过GOPROXY来控制代理,以及通过GOPRIVATE控制私有库不走代理。 设置GOPROXY代理: go env -w GOPROXY=https://goproxy.cn,direct 设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔: go env -w GOPRIVATE=*.gitlab.com,*.gitee.com 如果在运行go mod vendor时,提示Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout,则是因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站是...阅读全文

博文 2019-09-26 14:33:27 aside section ._1OhGeD

golang 时间格式化

golang 时间格式化要指定默认的格式,如果不指定默认的格式就会出现错误,如果一个未知的时间格式需要做格式化,是比较棘手的。 下面是我在项目写的一个时间格式化函数,简单的支持几种格式 package util import ( "strings" "time" ) func TimeParseLocal(in string) (out time.Time, err error) { birStrLen := strings.Count(in, "") - 1 switch birStrLen { case 10: //2006-01-02 return TimeParse10(in) case 19: //2006-01-02 15:04:05 return TimeParse19(in)...阅读全文

博文 2019-04-20 17:34:41 VIL凌霄

go proxy 设置

在Go 1.13中,我们可以通过GOPROXY来控制代理,以及通过GOPRIVATE控制私有库不走代理。 设置GOPROXY代理: go env -w GOPROXY=https://goproxy.cn,direct 设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔: go env -w GOPRIVATE=*.gitlab.com,*.gitee.com 如果在运行go mod vendor时,提示Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout,则是因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站是...阅读全文

博文 2019-10-09 18:32:46 aside section ._1OhGeD

x64的操作系统使用x86的Golang:Sublime Text2 的Go Build 插件问题

默认的在x64草走系统里编译得到的路径为: go build -x -v -o bin\windows_amd64\xxx.exe src\main.go 无论Golang是x86还是x64都如此 修改方法: Sublime\Data\Packages\Go Build\GoBuild.py 89行: #output = os.path.join("bin", getArch(), project_name + ".exe") output = os.path.join("bin", "windows_386", project_name + ".exe") 把getArch换成:windows_386即...阅读全文

博文 2016-02-24 01:00:12 varding

Go 1.13设置代理

在Go 1.13中,我们可以通过GOPROXY来控制代理,以及通过GOPRIVATE控制私有库不走代理。 设置GOPROXY代理: go env -w GOPROXY=https://goproxy.cn,direct 设置GOPRIVATE来跳过私有库,比如常用的Gitlab或Gitee,中间使用逗号分隔: go env -w GOPRIVATE=*.gitlab.com,*.gitee.com 如果在运行go mod vendor时,提示Get https://sum.golang.org/lookup/xxxxxx: dial tcp 216.58.200.49:443: i/o timeout,则是因为Go 1.13设置了默认的GOSUMDB=sum.golang.org,这个网站是...阅读全文

博文 2019-09-05 17:32:46 shallot

go语言原生http库分析 (2)

这边我们分析默认的Handler–DefaultServeMux $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering....阅读全文

博文 2016-07-04 01:00:06 idwtwt

python go php 函数参数传递总结

php 参数传递等价赋值操作 数组默认是深度拷贝 ,可以添加&来引用传递 对象默认是浅拷贝 类似引用传递 其他默认是深度拷贝 python 所有类型都是对象 Python中的对象有可变对象(number,string,tuple等)和不可变对象之分(list,dict等) 1. 不可变对象作为函数参数,相当于C系语言的值传递。 2. 可变对象作为函数参数,相当于C系语言的引用传递。 go 所有类型也是对象 引用传递通过指针实现 其他默认是值传...阅读全文

博文 2016-10-12 14:00:03 pzqingchong

golang发邮件

由于go默认tls.Config{ServerName: host, InsecureSkipVerify: false}, func TestHtmlEmail(t *testing.T) { opt := &EmailOptions{ User: "", Password: "", To: []string{""}, From: "", Addr: "smtp.xxx.com:25", } auth := NewLoginAuth(opt.User, opt.Password) pic, err := ioutil.ReadFile(`C:\Pictures\example.png`) if err != nil { t.Log(err) } dest := make([]byte, b...阅读全文

博文 2017-03-09 08:01:01 u22b