小编bla*_*een的帖子

Javascript/Typescript:导出单个函数或 const 类有什么区别?

我正在 VueJs、Typescript 和 WebPack 中开发一个 Web 应用程序,我对如何管理/拆分功能组(实用程序和服务)感到有些困惑。

我在 GitHub 的各种项目中看到一些函数是直接从文件 ex 中声明和导出的:

实用程序.ts

export function Sum(a:number, b:number):number{
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

这可以与导入一起使用:

import {Sum} from "./utilities.ts"

let result = Sum(5,6);
Run Code Online (Sandbox Code Playgroud)

另一个常见的解决方案是声明一个 const 类:

otherUtilities.ts

export const OtherUtilities = {
    Sum(a:number, b:number) : number => {
        return a+b;
    },
    
    Hello() : string => {
        return "Hello";
    }
}
Run Code Online (Sandbox Code Playgroud)

并导入为:

import {OtherUtilities} from "./otherUtilities.ts"

let result = OtherUtilities.Sum(5,6);
Run Code Online (Sandbox Code Playgroud)

有什么区别?

过去,JS 存在名称冲突问题,但现在通过 Loaders 的导出/导入技术,这个问题应该已经过时了,对吧?

谢谢

javascript typescript ecmascript-6 es6-modules

8
推荐指数
1
解决办法
1万
查看次数

plpgsql:没有函数与给定的名称和参数类型匹配。您可能需要添加显式类型转换

我使用 DBeaver 在 PostgreSQL 中创建了一个函数。& 我正在尝试通过调用 DBeaver 中的函数将数据插入表中。但这给了我一个错误:

SQL错误[42883]:错误:函数public.proc_insert_test(整数,未知,未知,未知,未知,带时区的时间戳,整数,整数,整数,带时区的时间戳)不存在提示:没有函数与给定名称匹配和参数类型。您可能需要添加显式类型转换。位置:8

功能:

CREATE OR REPLACE FUNCTION public.proc_insert_test(
  p_brndcode integer, p_brndname varchar(100), p_brndsname varchar(100), 
  p_prdtype char(1), p_discontinue char(1), p_crddate date,
  p_status integer, p_recstat integer, p_brndgrpseqno integer,
p_wefrom date)
RETURNS char 
LANGUAGE plpgsql
AS $body$
BEGIN
  Insert into arc_mmstbrndgroup(brndcode, brndname, brndsname, prdtype, discontinue, crddate, status, recstat, brndgrpseqno, wefrom) 
  values(p_brndcode, p_brndname, p_brndsname, p_prdtype, p_discontinue, p_crddate, p_status, p_recstat, p_brndgrpseqno, p_wefrom);
END;
$body$
;
Run Code Online (Sandbox Code Playgroud)

调用函数:

select public.proc_insert_test(123, 'Test2', 'Test2', 'T', 'T', now(), 1, 9, 1234, now());
Run Code Online (Sandbox Code Playgroud)

可能是什么问题? …

sql database postgresql plpgsql

8
推荐指数
1
解决办法
5万
查看次数

如何以编程方式获取 syscall.Mount() 的文件系统类型

Linuxsyscall.Mount函数需要一个文件系统类型。

如果您尝试使用文件系统运行它auto,如下所示:

func main(){
    if err := syscall.Mount("/dev/sda1", "/mnt1", "auto", 0, "w"); err != nil {
        log.Printf("Mount(\"%s\", \"%s\", \"auto\", 0, \"rw\")\n","/dev/sda1","/mnt1")
        log.Fatal(err)
    }
}

Run Code Online (Sandbox Code Playgroud)

它将失败no such device。这已经说明这里Linux的syscall.Mount只是包装mount(2)其本身不支持“自动”文件系统类型的概念

我知道如何使用 bash 找到它:

root@ubuntu:~/go/src# blkid /dev/sda1
/dev/sda1: UUID="527c895c-864e-4f4c-8fba-460754181173" TYPE="ext4" PARTUUID="db5c2e63-01"
Run Code Online (Sandbox Code Playgroud)

或者

root@ubuntu:~/go/src# file -sL /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=527c895c-864e-4f4c-8fba-460754181173 (needs journal recovery) (extents) (large files) (huge files)

Run Code Online (Sandbox Code Playgroud)

在这两种情况下,您都会获得ext4文件系统类型。

更换autoext4 …

linux filesystems bash mount go

8
推荐指数
1
解决办法
215
查看次数

如何从 Gin 中的任何端点处理程序获取完整的服务器 URL

我正在使用 Go 的 Gin Web 框架创建一个端点。我的处理函数中需要完整的服务器 URL。例如,如果服务器正在运行http://localhost:8080并且我的端点是,那么当调用我的处理程序时/foo我需要。http://localhost:8080/foo

如果有人熟悉 Python 的快速 API,该对象有一个具有完全相同功能的Request方法:https: //stackoverflow.com/a/63682957/5353128url_for(<endpoint_name>)

在 Go 中,我尝试访问context.FullPath(),但只返回我的端点/foo,而不返回完整的 URL。除此之外,我在文档中找不到合适的方法:https://pkg.go.dev/github.com/gin-gonic/gin#Context

那么这可以通过gin.Context对象本身实现吗?还是还有其他方法?我对 Go 完全陌生。

go go-gin

8
推荐指数
1
解决办法
2万
查看次数

如何获取与 WaitGroup 关联的 goroutine 数量?

让\xe2\x80\x99s 说我使用 aWaitGroup让应用程序的主线程等待,直到我从所述 main 启动的所有 goroutine 完成。

\n

是否有一种安全、直接的方法可以在任何时间点评估有多少与 said 相关的 goroutineWaitGroup仍在运行?

\n

synchronization go goroutine waitgroup

8
推荐指数
2
解决办法
8774
查看次数

通过 Go (go 1.18) 泛型创建类型化值的新对象

我正在 go 1.18 的 beta 版本中使用泛型。下面示例中的创建函数应该创建*T(therefore *Apple) 的新实例。我尝试使用反射包来实现这一点,但没有运气。

您能否告诉我如何更改Create下面示例中的函数,以便它创建实例而T不是返回 nil 并使我的示例崩溃?

type FruitFactory[T any] struct{}

func (f FruitFactory[T]) Create() *T {
    //how to create non-nil fruit here?
    return nil
}

type Apple struct {
    color string
}

func example() {
    appleFactory := FruitFactory[Apple]{}
    apple := appleFactory.Create()
    //panics because nil pointer access
    apple.color = "red"
}
Run Code Online (Sandbox Code Playgroud)

generics go

8
推荐指数
1
解决办法
8479
查看次数

比较 和 任何 有什么区别?

我尝试在 Go 中使用泛型,但我不太明白何时使用anyorcomparable作为类型参数。有人可以帮助理解这些吗?

generics go comparable any

8
推荐指数
1
解决办法
2709
查看次数

确保 Go 1.20 中编译时的严格可比性?

在 Go 1.18 和 Go 1.19 中,我可以确保在编译时类型是严格可比较的,即它支持==!=运算符,并且保证它们在运行时不会出现恐慌

例如,这对于避免无意中向结构添加可能导致不必要的恐慌的字段很有用。

我只是尝试comparable用它实例化:

// supports == and != but comparison could panic at run time
type Foo struct {
    SomeField any
}

func ensureComparable[T comparable]() {
    // no-op
}

var _ = ensureComparable[Foo] // doesn't compile because Foo comparison may panic
Run Code Online (Sandbox Code Playgroud)

由于约束的定义,这在 Go 1.18 和 1.19 中是可能的comparable

预先声明的接口类型可比较表示所有可比较的非接口类型的集合

尽管 Go 1.18 和 1.19 规范没有提及不是接口但也不能严格比较的类型,例如[2]fmt.Stringeror struct { foo any },gc …

generics go comparable compile-time-type-checking

8
推荐指数
1
解决办法
599
查看次数

`//go:build` 和 `// +build` 指令之间有什么区别?

例如,https : //github.com/golang/sys/blob/master/cpu/cpu_gccgo_x86.go#L5

//go:build (386 || amd64 || amd64p32) && gccgo
// +build 386 amd64 amd64p32
// +build gccgo

package cpu
Run Code Online (Sandbox Code Playgroud)

在我看来,作为构建标签,// +build ... 可以很好地工作。
为什么//go:build仍然明确指定?

顺便说一句,很难找到 的手册//go:build,但// +build很容易(https://pkg.go.dev/cmd/go#hdr-Build_constraints

build go go-build

7
推荐指数
1
解决办法
134
查看次数

我可以构造具有不同类型参数的泛型类型切片吗?

在下面的代码中,我有一个包含文字值的标记类型。通过使用空接口,我可以创建一个令牌切片并附加具有不同类型的令牌。我认为使用泛型不可能完成相同的任务,因为我们无法推断令牌切片的类型。这个假设正确吗?

type Token struct {
    TokenType string
    Literal interface{}
}

func main(){
    tok1 := &Token{TokenType: "string", Literal: "foo"}
    tok2 := &Token{TokenType: "integer", Literal: 10}
    tokS := []*Token{tok1, tok2}
}
Run Code Online (Sandbox Code Playgroud)

generics go slice type-parameter

7
推荐指数
1
解决办法
9215
查看次数