golang---常用函数

package main; import ( "os" "fmt" "time" "strings" ) //os包中的一些常用函数 func main() { //获取主机名 fmt.Println(os.Hostname()); //获取当前目录 fmt.Println(os.Getwd()); //获取用户ID fmt.Println(os.Getuid()); //获取有效用户ID fmt.Println(os.Geteuid());

  • 0
  • 0
  • 阅读 ( 244 )

golang函数入门示例

函数 函数可以没有参数或接受多个参数。 在本例中,add 接受两个 int 类型的参数。 注意类型在变量名 之后。 (参考 这篇关于 Go 语法声明的文章 了解这种类型声明形式出现的原因。) package main import "fmt" func add ( x int , y int ) int { return x + y } func main ( ) { fmt . Println ( add ( 42 , 13 ) ) } 本文包含: --> -->

  • 0
  • 0
  • 阅读 ( 275 )

golang ---常用函数:make

简介 内建函数 make 用来为 slice,map 或 chan 类型分配内存和初始化一个对象(注意:只能用在这三种类型上) slice // 长度为5,容量为10的slice,slice中的元素是int var slice_ []int = make([]int,5,10) fmt.Println(slice_) var slice_1 []int = make([]int,5) fmt.Println(slice_1) var slice_2 []int = []int{1,2} fmt.Print

  • 0
  • 0
  • 阅读 ( 264 )

golang学习笔记---函数

函数 1. 函数定义与调用 //1、函数组成:关键字func ,函数名,参数列表,返回值,函数体,返回语句 //先名称后类型 func 函数名 (参数列表 ) (返回值列表 ) { //参数列表和返回值列表以变量声明的形式,如果单返回值可以直接加类型 函数体 return //返回语句 } //例子 func Add (a ,b int ) (ret int ,err error ) { //函数体 return //return语句 } //2、函数调用 //先导入函数所在的包,直接调用函数 impor

  • 0
  • 0
  • 阅读 ( 259 )

Go/Gin 数据库相关

1、安装gorm go get -u gorm.io/gorm go get -u gorm.io/driver/mysql 2、引入 import ( "gorm.io/gorm" "gorm.io/driver/sqlite" ) 3、连接(使用原生) func main() { dsn := "root:root678@tcp(127.0.0.1:3306)/topics?charset=utf8mb4&parseTime=True&loc=L

  • 0
  • 0
  • 阅读 ( 232 )

Go常用设计模式(中)

继上一篇文章,今天来分享下Go常用设计模式中的行为型模式——策略模式和模板方法模式。 1 策略模式 1.1 概念 策略模式更像是把接口比做成一种行为集合,由对象去选择性的实现行为集合中的某些行为,而实现具体行为需要由某种策略,策略模式因此而生。 1.2 代码 首先定义行为集接口Operator,包含具体行为Apply,具体对象行为集中的行为环境,实现再定义两个对象Addition、Multiplication实现具体的行为。 实现具体行为时要在行为环境中指定具体的策略,就是说明要实现哪个行为,然后再调用具

  • 0
  • 1
  • 阅读 ( 230 )

Go常用设计模式(上)

1 Go常用设计模式概览 创建型模式 设计模式 使用场景 单例模式 全局共享一个实例,且只需要被初始化一次的场景 工厂模式 简单工厂模式 :传入参数并返回一个结构体的实例;<br/> 抽象工厂模式 :返回一个接口,通过返回接口,在不公开内部实现的情况下,让调用者使用你提供的各种功能。<br/> 工厂方法模式 :将对象创建从由一个对象负责所有具体类的实例化,变成由一群子类来负责对具体类的实例化,从而将过程解耦 行为型模式 设计模式 使用场景 策略模式 需要采用不同策略的场景 模板模式

  • 0
  • 0
  • 阅读 ( 404 )

Go 设计模式

设计模式 在这里插入图片描述 代理模式 代理模式是在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这个是跟装饰器模式最大的区别。一般情况下,我们让代理类和原始类实现相同的接口,但是如果原始类并没有定义接口,并且原始类代码并不是我们开发维护的,这种情况下,让代理类继承原始类方法来实现代理。 简单的说,实现代理有两个方式: 代理类和原始类实现相同的接口 代理类继承原始类 应用场景 代理模式常用在业务系统开发一些非功能的需求,比如,监控,日志,统计,鉴权,限流,事务,幂等校

  • 0
  • 0
  • 阅读 ( 298 )

go建造者模式,【go设计模式】

直接代码: ackage main import "fmt" //现在有教室和宿舍,教室两扇们,窗户高两米, 宿舍一扇门,窗户高一米 type Room struct {     doorNum      int      windowHeight int  } func (r *Room) showRoomInfo() {     fmt.Println("door num:", r.doorNum, "door windowHeight:", r.win

  • 0
  • 0
  • 阅读 ( 336 )

Go 设计模式 - 工厂模式

Go 设计模式 - 工厂模式 简单工厂模式 工厂方法模式 创建者模式 单例模式 简单工厂模式 go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。 在这个simplefactory包中只有API 接口和NewAPI函数为包外可见,封装了实现细节。 simple.go代码 package simplefactory import "fmt" //API is interfac

  • 0
  • 0
  • 阅读 ( 351 )

golang切片和数组拷贝(浅拷贝和深拷贝)

文章目录 golang切片和数组拷贝 基础 什么是浅拷贝和深拷贝? golang数组和切片的区别 Golang中的值传递和引用传递 golang数组拷贝 golang切片拷贝 数组和切片拷贝总结 参考 golang切片和数组拷贝 基础 Go 语言里面变量有两类,一类是值类型,一类是引用类型。 在 Go 语言中: string、int、bool、float 等这些都属于值类型 slice、map、chan 等这些都属于引用类型 什么是浅拷贝和深拷贝? 我们提到的深拷贝和浅拷贝,则指的是引用类型的值处理方案。

  • 0
  • 0
  • 阅读 ( 265 )

浅析Golang的深浅拷贝

明确概念 深拷贝: 仅对值进行拷贝,并创建一个新的对象,新对象和被拷贝的对象指向不同的地址。 浅拷贝: 同时对值和地址进行拷贝,创建一个新的对象指向被拷贝对象的地址。 Golang中深拷贝和浅拷贝的数据类型都有哪些呢? 浅拷贝一般都是引用类型,通常分配在堆上,通过GC(垃圾回收机制)回收,例如:指针、slice、map、chan等都是引用类型 深拷贝是值类型的,通常分配在栈上,比如,数组,int ,bool, struct等 值得注意的是Go中的append和copy也都是深拷贝

  • 0
  • 1
  • 阅读 ( 254 )

golang复制切片的方法(避免操作同一底层数组)

复制切片的目的:避免操作同一底层数组 由于切片是引用类型。但自身是结构体,值拷贝传递。如果直接使用 target:=source 那么操作target也会影响source数值 所以下面有两种方法进行切片复制的操作 方法一: target := make ( [ ] int , len ( source ) ) copy ( target , source ) 方法二: target := append ( [ ] int { } , source ... )

  • 0
  • 0
  • 阅读 ( 220 )

golang拷贝函数总结

golang拷贝函数总结@ TOC golang直接内置函数append和copy都是浅拷贝,都不支持深拷贝,golang原生的内置函数没有像java那种深拷贝 append函数的拷贝,如果拷贝对象是结构体里面的数组,则拷贝的是数组的地址,如果是普通类型,则拷贝的是对象的值,如果是需要进行深拷贝,则需要自己复制对象,网上还有一种是通过序列化的方式来进行深拷贝,我没有测试成功 例子如下: type Data struct { Name []string Value string } type Datas [

  • 0
  • 0
  • 阅读 ( 238 )

golang:切片拷贝

内置函数copy()可以将一个数组切片复制到另一个数组切片中,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。 copy ( destSlice , srcSlice [ ] T ) int 其中 srcSlice 为数据来源切片,destSlice 为复制的目标(也就是将 srcSlice 复制到 destSlice),目标切片必须分配过空间且足够承载复制的元素个数,并且来源和目标的类型必须一致,copy() 函数的返回值表示实际发生复制的元素个数。 下面的代码展示了使

  • 0
  • 0
  • 阅读 ( 246 )

go 切片(创建、nil切片、空切片、切片拷贝)

一、什么是切片 1.切片就是一个“动态”数组,即切片的长度是可以伸缩的。其数据结构是一个结构体,包含三个字段,指向数组的指针、长度、容量。 type slice struct { array unsafe.Pointer //一个指向数组的指针 len int cap int } 2.切片的指针指向某个数组,所以它是引用类型。 3.代码验证切片是引用类型 package main import "fmt" //传入切片 func change(s []string) { s[1] = &#

  • 0
  • 0
  • 阅读 ( 215 )

Golang:数组与切片的复制

在Golang中,数组是值类型而切片是引用类型。因此值的复制与切片的复制并不相同。 数组的复制 对于值类型的数组来说,变量指向的并不是第一个元素的指针,而是整个数组。以下情况会发生数组的复制: 将数组变量赋值给另一个数组变量 将数组变量作为参数传递给方法 举个栗子: package main import "fmt" func main() { sample1 := [2]string{"a", "b"} fmt.Printf("Sample1 Be

  • 0
  • 0
  • 阅读 ( 278 )

GoLang复制/拷贝一个切片

使用内建方法copy func CopySlice ( src [ ] int ) [ ] int { if src == nil { return nil } dup := make ( [ ] int , len ( src ) ) copy ( dup , src ) return dup } 使用append方法 func CopySlice ( src [ ] int ) [ ] int { return append ( [ ] int ( nil ) , src ... ) } 主要说的是使

  • 0
  • 0
  • 阅读 ( 238 )

【Go】深拷贝与浅拷贝

文章目录 一、深浅拷贝 二、深拷贝 三、浅拷贝 四、总结 参考链接 一、深浅拷贝 在很多编程语言都有深浅拷贝的这个概念,当然golang也不例外。 在 go 语言中 值类型 赋值都是 深拷贝 , 引用类型 一般都是 浅拷贝 。 其本质就是,深拷贝会拷贝数据(两变量存储地址不同,拷贝结束互不影响)。而浅拷贝只会拷贝内存的地址(即使拷贝结束,还是互相影响),所以就会出现,像 slice 那样修改底层数组的值,slice 的值也跟着改动。 二、深拷贝 b 拷贝 a 后,如果修改 a 的值,b不变,说明是值的拷贝

  • 0
  • 0
  • 阅读 ( 213 )

Golang 数组拷贝是值拷贝

Golang 数组拷贝是值拷贝,两个的地址不相同,内容相同 var ar1 [ 5 ] string ar2 := [ 5 ] string { "Red" } ar1 = ar2 fmt . Printf ( "%p, %p, %+v\n" , & ar1 , & ar2 , ar1 == ar2 ) // 0xc0000b2000, 0xc0000b2050, true

  • 0
  • 0
  • 阅读 ( 184 )